package com.master.rn;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;

import com.master.bd.Controladoria_CustoBD;
import com.master.ed.ContaED;
import com.master.ed.Controladoria_CustoED;
import com.master.ed.Dre_ItemED;
import com.master.util.Excecoes;
import com.master.util.Valor;
import com.master.util.bd.Transacao;

public class Controladoria_CustoRN
    extends Transacao {
  Controladoria_CustoBD Controladoria_CustoBD = null;

  public Controladoria_CustoRN () {

  }

  /********************************************************
   *
   *******************************************************/
  public Controladoria_CustoED inclui (Controladoria_CustoED ed) throws Excecoes {

    Controladoria_CustoED Controladoria_CustoED = new Controladoria_CustoED ();

    this.inicioTransacao ();
    Controladoria_CustoBD = new Controladoria_CustoBD (this.sql);
    Controladoria_CustoBD.inclui (ed);
    this.fimTransacao (true);

    return Controladoria_CustoED;
  }

  /********************************************************
   *
   *******************************************************/
  public void altera (Controladoria_CustoED ed) throws Excecoes {

    this.inicioTransacao ();

    Controladoria_CustoBD = new Controladoria_CustoBD (this.sql);
    Controladoria_CustoBD.altera (ed);

    this.fimTransacao (true);

  }

  /********************************************************
   *
   *******************************************************/
  public void deleta (Controladoria_CustoED ed) throws Excecoes {

    this.inicioTransacao ();

    Controladoria_CustoBD = new Controladoria_CustoBD (this.sql);
    Controladoria_CustoBD.deleta (ed);

    this.fimTransacao (true);

  }

  /********************************************************
   *
   *******************************************************/
  public ArrayList lista (Controladoria_CustoED ed) throws Excecoes {

    this.inicioTransacao ();
    ArrayList lista = new Controladoria_CustoBD (sql).lista (ed);

    for (int i=0 ; i<lista.size() ; i++) {			 // Itera os itens do dre para somar pra cima
    	Controladoria_CustoED item = (Controladoria_CustoED)lista.get(i);  // Pega a item da lista
		if ("A".equals(item.getDm_tipo_conta())){
			somaParaCima(lista, item.getCd_Estrutural_Custo(), item.getVl_lancamento());
		}
	}

    this.fimTransacao (false);
    return lista;
  }

  /********************************************************
   *
   *******************************************************/
  public Controladoria_CustoED getByRecord (Controladoria_CustoED ed) throws Excecoes {
    //inicia conexao com bd
    this.inicioTransacao ();
    //instancia ed de retorno
    Controladoria_CustoED edVolta = new Controladoria_CustoED ();
    //atribui ao ed de retorno
    edVolta = new Controladoria_CustoBD (this.sql).getByRecord (ed);
    //libera conexao nao "commitando"
    this.fimTransacao (false);

    return edVolta;
  }

  public void getByRecord (Controladoria_CustoED ed , HttpServletRequest request , String nmObj) throws Excecoes {
    //inicia conexao com bd
    this.inicioTransacao ();
    //instancia ed de retorno
    Controladoria_CustoED edVolta = new Controladoria_CustoED ();
    //atribui ao ed de retorno
    edVolta = new Controladoria_CustoBD (this.sql).getByRecord (ed);
    //libera conexao nao "commitando"
    this.fimTransacao (false);

    request.setAttribute (nmObj , edVolta);
  }

  /********************************************************
   *
   *******************************************************/
  public Controladoria_CustoED getByCD (Controladoria_CustoED ed) throws Excecoes {
    //inicia conexao com bd
    this.inicioTransacao ();
    //instancia ed de retorno
    Controladoria_CustoED edVolta = new Controladoria_CustoED ();
    //atribui ao ed de retorno
    edVolta = new Controladoria_CustoBD (this.sql).getByCD (ed);
    //libera conexao nao "commitando"
    this.fimTransacao (false);

    return edVolta;
  }

  private void somaParaCima(ArrayList l,String ce, double vl1){
	  Controladoria_CustoED edConta = new Controladoria_CustoED();
		edConta.setCd_Estrutural_Custo(ce);
		String cdPai =  edConta.pegaGrauInferior();
		if (! "*".equals(cdPai) ) {
			for ( int i=0;i<l.size();i++){
				Controladoria_CustoED item = (Controladoria_CustoED)l.get(i);
				if (cdPai.equals(item.getCd_Estrutural_Custo())) {
					item.setVl_lancamento(Valor.round(item.getVl_lancamento() + vl1,2));
					l.set(i,item);
					break;
				}
			}
			this.somaParaCima( l, cdPai, vl1);
		}
	}

}
